package com.alcargo.tools.sample.main;

//import java.util.Arrays;
//import java.util.Hashtable;
//import java.util.Properties;
//
//import javax.naming.Context;
//import javax.naming.Name;
//import javax.naming.NamingEnumeration;
//import javax.naming.NamingException;
//import javax.naming.directory.Attributes;
//import javax.naming.directory.DirContext;
//import javax.naming.directory.InitialDirContext;
//import javax.naming.directory.SchemaViolationException;
//import javax.naming.directory.SearchControls;
//import javax.naming.directory.SearchResult;
//
//import org.apache.commons.lang.ArrayUtils;
//import org.apache.log4j.Logger;
//import org.omg.CORBA.CTX_RESTRICT_SCOPE;

public class LDAPSampleMain {
//	private static Logger logger = Logger.getLogger(LDAPSampleMain.class);
//
//	private static DirContext ctx;
//	private static String ldapContextFactory;
//	private static String ldapProviderUrl;
//	private static String ldapPrincipal;
//	private static String ldapCredentials;
//	private static String ldapPrefix;
//	private String testFilter="(&(dc=ALCARGO)";
//	
//	public static DirContext getCtx() {
//		return ctx;
//	}
//
//	public static void setCtx(DirContext ctx) {
//		LDAPSampleMain.ctx = ctx;
//	}
//
//	public static void main(String arg[]) throws NamingException{
////		 String[] upAttrs =
////		{
////			"userpassword",
////			"cn",
////			"mail",
////			"facsimiletelephonenumber",
////			"telephonenumber",
////			"mobile",
////			"postaladdress",
////			"postalcode",
////			"l",
////			"o",
////			"entrydn" };
////
////		LDAPSampleMain ldap =  LDAPSampleMain.getInstance();
////		NamingEnumeration results =
////			ldap.searchSubTree("", "(&(uid=lluo))", upAttrs);
////		System.out.println(((SearchResult)results.next()).getAttributes().get("cn"));
//	}
//	
//
//
//
//
//
//
//	public  DirContext initContext(Properties parameter) throws NamingException{
//		Hashtable env = new Hashtable<String, String>();
//		env.put(Context.INITIAL_CONTEXT_FACTORY, parameter.getProperty("INITIAL_CONTEXT_FACTORY"));
//		env.put(Context.PROVIDER_URL, parameter.getProperty("PROVIDER_URL")+parameter.getProperty("PREFIX"));
//		env.put(Context.SECURITY_PRINCIPAL, parameter.getProperty("SECURITY_PRINCIPAL"));
//		env.put(Context.SECURITY_CREDENTIALS, parameter.getProperty("SECURITY_CREDENTIALS"));
//		ctx = new InitialDirContext(env);
//		return ctx;
//	}
//
//	public boolean create(String target, Attributes attrs) {
//		try {
//			ctx.createSubcontext(target, attrs);
//			return true;
//		} catch (SchemaViolationException sve) {
//			sve.printStackTrace();
//
//			return false;
//		} catch (NamingException ex) {
//			System.err.println("failed : " + ex.getMessage());
//			ex.printStackTrace();
//			System.err.println(ex.getExplanation());
//			return false;
//		}
//	}
//
//	public NamingEnumeration search(
//		String context,
//		Attributes filter,
//		String[] attrIDs) {
//		NamingEnumeration results = null;
//		try {
//			results = ctx.search(context, filter, attrIDs);
//		} catch (NamingException ex) {
//		}
//		return results;
//	}
//
//	public NamingEnumeration search(String context, Attributes filter) {
//		NamingEnumeration results = null;
//		try {
//			results = ctx.search(context, filter);
//		} catch (NamingException ex) {
//		}
//		return results;
//	}
//
//
//	public NamingEnumeration searchSubTree(Context context , String [] parameter) throws NamingException{
//
//		SearchControls ctrls = new SearchControls();
//		String[] attrIDs = null;
//		attrIDs = (String[]) ArrayUtils.subarray(parameter, 2, parameter.length);
//		ctrls.setReturningAttributes(attrIDs);
//		ctrls.setSearchScope(SearchControls.SUBTREE_SCOPE);		
//		return ctx.search( parameter[0], parameter[1],ctrls);
//		
//	}
//
//	public boolean deleteContext(String context) {
//		try {
//			ctx.destroySubcontext(context);
//			return true;
//		} catch (NamingException ex) {
//			ex.printStackTrace();
//			return false;
//		}
//	}
//
//	public void addAttributes(String context, Attributes attrs) {
//		try {
//			//判断属性值是否已经存在
//			String parentContext;
//			int pos = context.indexOf(",");
//			if (pos == -1)
//				parentContext = "";
//			else
//				parentContext = context.substring(pos + 1);
//
//			NamingEnumeration results =
//				this.search(parentContext, attrs, new String[] { "cn" });
//			if (results != null && !results.hasMore())
//				ctx.modifyAttributes(context, DirContext.ADD_ATTRIBUTE, attrs);
//		} catch (NamingException ex) {
//			ex.printStackTrace();
//		}
//	}
//
//	public void updateAttributes(String context, Attributes attrs) {
//		try {
//			logger.debug("update ldap attributes ...");
//			logger.debug("contect is '" + context + "'");
//			int index = context.toLowerCase().indexOf(ldapPrefix.toLowerCase());
//			String temp = context.substring(0, index - 1);
//			logger.debug("name is '" + temp + "'");
//			ctx.modifyAttributes(temp, DirContext.REPLACE_ATTRIBUTE, attrs);
//			logger.debug("finish update ldap attributes.");
//		} catch (NamingException ex) {
//			ex.printStackTrace();
//		}
//	}
//
//	public boolean deleteAttributes(String context, Attributes attrs) {
//		try {
//			//判断属性值是否已经存在
//			String parentContext;
//			int pos = context.indexOf(",");
//			if (pos == -1)
//				parentContext = "";
//			else
//				parentContext = context.substring(pos + 1);
//
//			NamingEnumeration results =
//				this.search(parentContext, attrs, new String[] { "cn" });
//			if (results.hasMore())
//				ctx.modifyAttributes(
//					context,
//					DirContext.REMOVE_ATTRIBUTE,
//					attrs);
//			return true;
//		} catch (NamingException ex) {
//			ex.printStackTrace();
//			return false;
//		}
//	}
//
//	/**
//	 * 取得当前连接的Ldap的根
//	 * @return
//	 */
//	public String getRoot() {
//		try {
//			return ctx.getNameInNamespace();
//		} catch (Exception e) {
//			logger.error("error when get root");
//			e.printStackTrace();
//			return "";
//		}
//	}
//
//
//	
}
